#include <mips/regdef.h>
	.text
	.align	2
	.globl	Pop

Pop:
	# Armo el stack frame
	# Es una leaf, no guardo el ra
	subu	sp,sp,24
	sw	$fp,20(sp)
	sw	gp,16(sp)
	move	$fp,sp

	# Como es callee, debo guardar los argumentos de la caller
	sw	a0,24($fp)	# *topePila
	sw	a1,28($fp)	# tamanioPila
	sw	a2,32($fp)	# *cantidadElementos
	sw	a3,36($fp)	# *valor

	lw	t0,32($fp)	# t0 = *cantidadElementos
	lw	t0,0(t0)	# t0 = cantidadElementos (resuelvo el puntero)
	bne	t0,zero,get	# Si hay elementos voy al tag get
	addi	v0,zero,0	# Guardo cero en v0 para devolver el error 
	b	fin

get:
	lw	t1,36($fp)	# t1 = *valor
	lw	t2,32($fp)	# t2 = *cantidadElementos
	lw	t2,0(t2)	# t2 = cantidadElementos (resuelvo el puntero)
	addu	t2,t2,-1	# cantidadElementos--;
	sll	t4,t2,3		# t4 = cantidadElementos * 8
	lw	t3,24($fp)	# t3 = *topePila 
	addu	t3,t4,t3	# *topePila = *topePila + (cantidadElementos-1)
	l.d	$f0,0(t3)	# cargo en f0 el valor de la pila
	s.d	$f0,0(t1)	# Guardo f0 en la posición indicada por *valor
	lw	t1,32($fp)	# t1 = *cantidadElementos
	lw	t2,32($fp)	# t2 = *cantidadElementos
	lw	t2,0(t2)	# t2 = cantidadElementos
	addu	t2,t2,-1	# t2 = cantidadElementos--
	sw	t2,0(t1)	# Actualizo cantidadElementos
	addi	v0,zero,1	# v0 = 1 (return 1) 

fin:
	# Desarmo el stackframe
	move	sp,$fp
	lw	$fp,20(sp)
	lw	gp,16(sp)
	addu	sp,sp,24
	j	ra
